package com.ai.service.made;

import com.ai.common.CommonResponse;
import com.ai.entity.made.OpcServerInfo;
import com.ai.entity.made.RegionBase;
import com.ai.entity.made.page.OpcServerInfoPage;
import com.ai.model.dto.OpcServerInfoDto;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.eclipse.milo.opcua.sdk.client.api.UaClient;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author jiaok
 * @since 2024-11-14
 */
public interface IOpcServerInfoService extends IService<OpcServerInfo> {


    /**
     * 新增opc server
     * @param opcServerInfoDto server信息
     * @return
     */
    CommonResponse<String> add(OpcServerInfoDto opcServerInfoDto);

    /**
     * 修改opcServer连接状态
     * @param opcServerId opcServerId
     * @param state 状态  -1:连接失败；0:连接中，1连接成功
     */
    void updateOpcServerState(String opcServerId, String state);

    /**
     * 项目启动时，初始化Opc的连接以及监听节点
     */
    void initConnectOpc();



    /**
     * 获取opcServer的所有id和名称
     * @return
     */
    CommonResponse getOpcServerNameList();


    /**
     * 删除opc设备
     * @param id id
     * @return
     */
    CommonResponse<String> delete(String id);

    /**
     * 修改opc设备信息
     * @param opcServerInfoDto dto
     * @return
     */
    CommonResponse<String> edit(OpcServerInfoDto opcServerInfoDto);

    /**
     * opc设备分页查询
     * @param page 分页参数
     * @return
     */
    IPage selectByPage(OpcServerInfoPage page);

    /**
     * 根据opcServerId重新连接服务以及其下面的所有节点
     * @param opcServerId
     */
    void reconnectOpcServer(String opcServerId);

    /**
     * 检测到opc客户端的监控连接断开，尝试重新建立连接
     * @param opcServerId opcServerId
     * @param uaClient 客户端
     */
    void rebuildOpcSubscribe(String opcServerId, UaClient uaClient);
}
